﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Collections;
using LHS.Core.TableInfo;
using System.Collections.Specialized;
using MS.Core.Constants.Objects;

namespace LHS.Win
{
    public partial class frmCapThuoc : Form
    {
        LHS.Core.Clinical.ClinicalController objController = new LHS.Core.Clinical.ClinicalController();
        // Methods
        public frmCapThuoc(frmBANotCapThuoc fNotToa)
        {
            this._fNotToa = fNotToa;
            this.InitializeComponent();
        }
        private void btLuu_Click(object sender, EventArgs e)
        {

            string text = string.Empty;
            DataSet dataSource = (DataSet)this.dataGrid1.DataSource;
            for (int i = 0; i < dataSource.Tables[0].Rows.Count; i++)
            {
                long num2 = Convert.ToInt64(dataSource.Tables[0].Rows[i][InfoMedicineExport.MEXQUANTITYPERUNIT].ToString());
                long num3 = Convert.ToInt64(dataSource.Tables[0].Rows[i][InfoMedicineStock.MESQUANTITYINSTOCK].ToString());
                if ((num3 - num2) < 0L)
                {
                    string str2 = text;
                    text = str2 + "Thuốc " + dataSource.Tables[0].Rows[i][InfoMedicineExport.MEXMEDICINENAME].ToString() + " trong kho không đủ cấp. Số lượng thuốc trong kho còn :" + num3.ToString() + " \n";
                }
            }
            if (text != string.Empty)
            {
                MessageBox.Show(text, "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }
            else
            {
                try
                {
                    ListDictionary param = new ListDictionary();
                    param.Add(InfoClinicalRecord.CLRISN, this._fNotToa.clrISN);
                    objController.Exec_StoreProc("sp_SellMedicine", param);

                    MessageBox.Show("Toa thuốc đã được cấp", "Cấp Toa Thuốc", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    this.btLuu.Enabled = false;

                    //Cần test lại kỹ phần này---thaoht
                    DataSet ds = objController.LoadFromSql("select dbo.fn_Payment_Medicine_Check (@clrISN)", param, CommandType.Text);
                    if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) //ket qua tra ve dung, là số 1
                    {
                        this.btUpdate.Visible = true;
                        this.lbTienThuoc.Visible = true;
                        this.txtTienThuoc.Visible = true;
                    }
                    else
                    {
                        this.btUpdate.Visible = false;
                        this.lbTienThuoc.Visible = false;
                        this.txtTienThuoc.Visible = false;
                    }
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
        }

        private void btThoat_Click(object sender, EventArgs e)
        {
            try
            {
                DataTable dt = objController.GetData("vw_PatientHasPrescription");

                if (dt == null || dt.Rows.Count == 0)
                {
                    MessageBox.Show("Tất cả các toa đã được cấp!", "Không tìm thấy bệnh nhân chưa cấp toa thuốc", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    base.Close();
                }
                else
                {
                    this._fNotToa.WindowState = FormWindowState.Normal;
                    this._fNotToa.Activate();
                    this._fNotToa.TopMost = true;
                }
                base.Close();
            }
            catch (Exception ex)
            {
                Class.ShowException(ex);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (this.check())
            {
                try
                {
                    ListDictionary updateField = new ListDictionary();
                    updateField.Add(InfoInvoices.INVMEDICINEPAYMENT, this.parseString(this.txtTienThuoc.Text));

                    List<ExpressionObject> param = new List<ExpressionObject>();
                    param.Add(new ExpressionObject(InfoInvoices.CLRISN, this._fNotToa.clrISN));
                    objController.UpdateRow(InfoInvoices.TABLENAME,updateField, param);

                    MessageBox.Show("Đã cập nhật tiền thuốc", "Cấp Thuốc", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                catch (Exception ex)
                {
                    Class.ShowException(ex);
                }
            }
        }

        private bool check()
        {
            if (this.txtTienThuoc.Text == "")
            {
                MessageBox.Show("Vui lòng nhập số tiền thuốc cần cập nhật!", "Lỗi nhập", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                return false;
            }
            if (!this.IsNumber(this.parseString(this.txtTienThuoc.Text)))
            {
                MessageBox.Show("Vui lòng nhập kiểu số cho số tiền thuốc!", "Lỗi nhập", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                this.txtTienThuoc.Text = "";
                this.txtTienThuoc.Focus();
                return false;
            }
            if (Convert.ToInt64(this.parseString(this.txtTienThuoc.Text)) == 0L)
            {
                MessageBox.Show("Vui lòng nhập số tiền thuốc lớn hơn 0!", "Lỗi nhập", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                this.txtTienThuoc.Text = "";
                this.txtTienThuoc.Focus();
                return false;
            }
            return true;
        }

        private void frmCapThuoc_Load(object sender, EventArgs e)
        {
            this.txtID.Text = this._fNotToa.patID;
            this.txtTenBenhNhan.Text = this._fNotToa.patName;
            this.clrISN = this._fNotToa.clrISN;

            List<ExpressionObject> param = new List<ExpressionObject>();
            param.Add(new ExpressionObject(InfoClinicalRecord.CLRISN, this._fNotToa.clrISN));
            param.Add(new ExpressionObject(InfoMedicineStock.MESISN, 0, ExpressionObject.eSelectOperator.Morethan));
            DataTable dt = objController.GetData("vw_CheckMedicineStockBeforeExport", param);

            for (int i = 0; i < dt.Rows.Count; i++)
            {
               dt.Rows[i][InfoMedicineExport.MEXISN] = i + 1;
                switch (dt.Rows[i][InfoMedicineExport.MEXPRODUCTIONPERUNIT].ToString())
                {
                    case "0":
                        dt.Rows[i][InfoMedicineExport.MEXUSAGE] = "viên";
                        break;
                    case "1":
                        dt.Rows[i][InfoMedicineExport.MEXUSAGE] = "ống";
                        break;
                    case "2":
                        dt.Rows[i][InfoMedicineExport.MEXUSAGE] = "chai";
                        break;
                    case "3":
                        dt.Rows[i][InfoMedicineExport.MEXUSAGE] = "gói";
                        break;
                    case "4":
                        dt.Rows[i][InfoMedicineExport.MEXUSAGE] = "tuýp";
                        break;
                }
            }
            DataSet dsMedicineExport = new DataSet();
            dt.TableName = InfoMedicineExport.TABLENAME;
            dsMedicineExport.Tables.Add(dt);
            this.dataGrid1.DataSource = dsMedicineExport;
            this.dataGrid1.SetDataBinding(dsMedicineExport, InfoMedicineExport.TABLENAME);
            this.dataGrid1.TableStyles.Clear();
            this.loadDataGrid();
        }

        private void ID_Validate(object sender, KeyPressEventArgs e)
        {
            if ((!char.IsNumber(e.KeyChar) && (e.KeyChar != '\b')) && (e.KeyChar != '\r'))
            {
                e.Handled = true;
            }
        }

        public bool IsNumber(string text)
        {
            try
            {
                Convert.ToInt64(text);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public void loadDataGrid()
        {
            DataGridTableStyle table = new DataGridTableStyle();
            table.MappingName = InfoMedicineExport.TABLENAME ;
            table.AlternatingBackColor = Color.AliceBlue;
            table.HeaderForeColor = Color.Maroon;
            table.GridLineColor = Color.CornflowerBlue;
            DataGridTextBoxColumn column = new DataGridTextBoxColumn();
            column.MappingName =InfoMedicineExport.MEXISN ;
            column.HeaderText = "STT";
            column.Width = 100;
            column.NullText = string.Empty;
            table.GridColumnStyles.Add(column);
            DataGridTextBoxColumn column2 = new DataGridTextBoxColumn();
            column2.MappingName = InfoMedicineExport.MEXMEDICINENAME;
            column2.HeaderText = "Tên Thuốc";
            column2.Width = 0xb9;
            column2.NullText = string.Empty;
            table.GridColumnStyles.Add(column2);
            DataGridTextBoxColumn column3 = new DataGridTextBoxColumn();
            column3.MappingName = InfoMedicineExport.MEXQUANTITYPERUNIT;
            column3.HeaderText = "Số Lượng";
            column3.Width = 120;
            column3.NullText = string.Empty;
            column3.Alignment = HorizontalAlignment.Center;
            table.GridColumnStyles.Add(column3);
            DataGridTextBoxColumn column4 = new DataGridTextBoxColumn();
            column4.MappingName = InfoMedicineExport.MEXUSAGE;
            column4.HeaderText = "Đơn Vị";
            column4.Width = 120;
            column4.NullText = string.Empty;
            column4.Alignment = HorizontalAlignment.Center;
            table.GridColumnStyles.Add(column4);
            DataGridTextBoxColumn column5 = new DataGridTextBoxColumn();
            column5.MappingName = InfoMedicineStock.MESQUANTITYINSTOCK;
            column5.HeaderText = "";
            column5.Width = 0;
            column5.NullText = string.Empty;
            column5.Alignment = HorizontalAlignment.Center;
            table.GridColumnStyles.Add(column5);
            this.dataGrid1.TableStyles.Add(table);
        }

        public string parseString(string Tien)
        {
            string str = string.Empty;
            ArrayList list = new ArrayList();
            foreach (string str2 in Tien.Split(new char[] { '.' }))
            {
                list.Add(str2);
            }
            for (int i = 0; i < list.Count; i++)
            {
                str = str + list[i].ToString();
            }
            return str;
        }

        public string parseTien(string tien)
        {
            ArrayList list = new ArrayList();
            for (int i = 3; i < 100; i += 3)
            {
                list.Add(i.ToString());
            }
            char[] chArray = tien.ToCharArray();
            ArrayList list2 = new ArrayList();
            int num2 = 1;
            for (int j = chArray.Length; (j <= chArray.Length) && (j > 0); j--)
            {
                list2.Add(chArray[j - 1].ToString());
                for (int m = 0; m < list.Count; m++)
                {
                    if ((list[m].ToString() == num2.ToString()) && (j > 1))
                    {
                        list2.Add(".");
                    }
                }
                num2++;
            }
            string str = string.Empty;
            for (int k = list2.Count; (k <= list2.Count) && (k > 0); k--)
            {
                str = str + list2[k - 1].ToString();
            }
            return str;
        }

        private void txtTienThuoc_Leave(object sender, EventArgs e)
        {
            if (this.check())
            {
                this.txtTienThuoc.Text = this.parseString(this.txtTienThuoc.Text);
                this.txtTienThuoc.Text = this.parseTien(this.txtTienThuoc.Text);
            }
        }

    }
}